// 传统的类
// class Dog {
//     constructor(type, color) {
//         this.type = type;
//         this.color = color;

//     }
//     makeSound() {
//         console.log('汪汪汪');
//     }
//     eat() {
//         console.log('骨头来一根');
//     }
// }


// js 原型式的面向对象
// 构造函数
function Dog(type, color) {
    this.type = type;
    this.color = color;
}
// 任何函数都有一个prototype 对象
// Dog.prototype  xb  smy  关系
// 共同的实例  共享的方法
Dog.prototype.makeSound = function() {
    console.log(`${this.type}汪汪汪`);
}
Dog.prototype.eat = function() {
        console.log('骨头来一根');
    }
    // 1.把构造函数运行一下
    // 2.以new 的方式运行this 指向xb
const xb = new Dog('土狗', '白色');
xb.makeSound();
console.log(xb.type);
console.log(xb instanceof Dog);
// 私有属性
// 实例对象都有一个__proto__ 指向构造函数的prototype 对象
console.log(xb.__proto__, '----------');
console.log(Dog.prototype);
console.log(xb.__proto__ === Dog.prototype);
// xb   Dog.prototype
// xb  构造器有没有相应的属性，可以去原型(prototype)对象上查找
const smy = new Dog('萨摩耶', '白色');


// 传统的类构造器
// console.log(xb.constructor == smy.constructor); // true